package br.com.toscano.contpedido.view.servlet;

import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.toscano.contpedido.domain.Cliente;
import br.com.toscano.contpedido.domain.Pedido;
import br.com.toscano.contpedido.domain.Recebimento;
import br.com.toscano.contpedido.util.Util;
import br.com.toscano.contpedido.view.filter.ConfiguracaoFilter;

public class ExibeExtratoClienteServlet  extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		Cliente cliente = (Cliente)request.getSession().getAttribute("cliente");
		List<Pedido> pedidos = (List<Pedido>)request.getSession().getAttribute("pedidos");
		List<Recebimento> recebimentos = (List<Recebimento>)request.getSession().getAttribute("recebimentos");
		
		BigDecimal valorRecebimentos = (BigDecimal)request.getSession().getAttribute("valorRecebimentos");
		if (valorRecebimentos == null) valorRecebimentos = BigDecimal.ZERO;
		
		BigDecimal valorPedidos = (BigDecimal)request.getSession().getAttribute("valorPedidos");
		if (valorPedidos == null) valorPedidos = BigDecimal.ZERO;
		
		BigDecimal valorSaldoAnterior = (BigDecimal)request.getSession().getAttribute("valorSaldoAnterior");
		if (valorSaldoAnterior == null) valorSaldoAnterior = BigDecimal.ZERO;
		
		BigDecimal valorSaldoAtual = (BigDecimal)request.getSession().getAttribute("valorSaldoAtual");
		if (valorSaldoAtual == null) valorSaldoAtual = BigDecimal.ZERO;
		
		BigDecimal valorDiferencaPeriodo = BigDecimal.ZERO;
		valorDiferencaPeriodo = valorRecebimentos.subtract(valorPedidos);
		
		BigDecimal valorTotalExtrato = (BigDecimal)request.getSession().getAttribute("valorTotalExtrato");
		if (valorTotalExtrato == null) valorTotalExtrato = BigDecimal.ZERO;

		Date dataInicial = (Date)request.getSession().getAttribute("dataInicial");
		Date dataFinal = (Date)request.getSession().getAttribute("dataFinal");

		response.setContentType("text/html;UTF-8");
		
		StringBuilder sb = new StringBuilder();
		sb.append("<html>");
		sb.append("	<head><title>Extrato do Cliente - " + ((cliente != null) ? cliente.getNome() : "") +  "</title>");
		
		sb.append("	<STYLE>");
		sb.append("	body, table, tr, td {");
		sb.append("		font-family: '" +ConfiguracaoFilter.RELATORIOS_FONT + "'; ");
		sb.append("	}");
		sb.append("	</STYLE>");

		sb.append("	</head>");
		sb.append("	<body>");
		
		sb.append("		<table border='0' width='800'>");
		for (int i = 0; i < ConfiguracaoFilter.RELATORIOS_REPETICOES_QUANTIDADE; i++) {
			sb.append("			<tr>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='50%' >");
			gerarExtrato(request, cliente, pedidos, recebimentos,
					valorRecebimentos, valorPedidos, valorSaldoAnterior,
					valorSaldoAtual, valorDiferencaPeriodo, valorTotalExtrato, dataInicial, dataFinal, sb);
			sb.append("				</td>");
			sb.append("			</tr>");
			sb.append("			<tr>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "'>&nbsp;</td>");
			sb.append("			</tr>");
			sb.append("			<tr>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "'>&nbsp;</td>");
			sb.append("			</tr>");
			sb.append("			<tr>");
			sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "'>&nbsp;</td>");
			sb.append("			</tr>");
		}
//		sb.append("			<tr>");
//		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='50%' >");
//
//		gerarExtrato(request, cliente, pedidos, recebimentos,
//				valorRecebimentos, valorPedidos, valorSaldoAnterior,
//				valorSaldoAtual, valorDiferencaPeriodo, valorTotalExtrato, dataInicial, dataFinal, sb);
//		sb.append("				</td>");
//		sb.append("			</tr>");
		sb.append("		</table>");
		

		sb.append("		<BR>");
		
		ExibeRecebimentoServlet.adicionarImprimir(sb);
		

		sb.append("</Body>");
		sb.append("</html>");
		
		OutputStream output = response.getOutputStream();
		
		output.write(sb.toString().getBytes());
		
		output.flush();
		
		output.close();
	}

	private void gerarExtrato(HttpServletRequest request, Cliente cliente,
			List<Pedido> pedidos, List<Recebimento> recebimentos,
			BigDecimal valorRecebimentos, BigDecimal valorPedidos,
			BigDecimal valorSaldoAnterior, BigDecimal valorSaldoAtual,
			BigDecimal valorDiferencaPeriodo, BigDecimal valorTotalExtrato, Date dataInicial, Date dataFinal, StringBuilder sb) {

		sb.append("		<table  border='0' width='600' height='40'>");
		sb.append("			<tr >");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "'  valign='top'>");
		sb.append("					<table  border='0' width='100%' height='100%'>");
		sb.append("						<tr>");
		sb.append("							<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' valign='top'>");
		sb.append("								<img width='"+ConfiguracaoFilter.LOGO_WIGHT +"' height='"+ConfiguracaoFilter.LOGO_HEIGTH+"' border='0' src='" + Util.getUrlBase(request)+"/images/"+ConfiguracaoFilter.LOGO +"'>");
		sb.append("							</td");
		sb.append("						</tr>");
		sb.append("						<tr>");
		sb.append("						</tr>");
		sb.append("					</table>");
		sb.append("				</td>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center' valign='top' ><font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_TITULO+"'> <font >" +ConfiguracaoFilter.NOME_PADARIA_RELATORIO + "</font>"
				+ "				<br><font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_DADOS_CLIENTE+"'><font >" +ConfiguracaoFilter.NOME_PADARIA_RUA + "</font> "
				+ "				<br><font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_DADOS_CLIENTE+"'><font >" +ConfiguracaoFilter.NOME_PADARIA_CNPJ + "</font> "
				+ "				<br><font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_DADOS_CLIENTE+"'><font >" +ConfiguracaoFilter.NOME_PADARIA_FONE + "</font> "
				+ "				<br><font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_DADOS_CLIENTE+"'><font >" +ConfiguracaoFilter.NOME_PADARIA_EMAIL + "</font> "
				+ "				<br><br><br><font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_SUB_TITULO+"'><font  >Extrato do Cliente</font> "
				+ "				<br></td>");
		sb.append("			</tr>");
		sb.append("			<tr>");
		sb.append("							<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='150'><font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_DATA+"'  ><strong> " + Util.dateToString(new Date()) +"</strong></font></td>");
		sb.append("							<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='150'>&nbsp;</td>");
		sb.append("			</tr>");
		sb.append("		</table>");

		
	
		sb.append("		<table border='0' width='600' cellspacing='0' cellpadding='0'>");
		sb.append("			<tr>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='33%' colspan='2'><font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"'  ><strong>Cliente</strong>: " + ((cliente != null) ? cliente.getNome() : "") +"</font></td>");
		sb.append("			</tr>");
		sb.append("			<tr>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='33%'><font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"'  ><strong>De </strong>: " + Util.dateToString(dataInicial)+"</font></td>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='33%'><font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"'  ><strong>Ate</strong>: " + Util.dateToString(dataFinal)+"</font></td>");
		sb.append("			</tr>");
		sb.append("			<tr>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='33%' colspan='2'><font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"'  ><strong>Saldo Anterior</strong>: " + Util.formataValorParaString(valorSaldoAnterior,2) +"</font></td>");
		sb.append("			</tr>");
		sb.append("			<tr>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='33%' colspan='2'><font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"'  ><strong>Saldo no Período</strong>: " + Util.formataValorParaString(valorDiferencaPeriodo,2) +"</font></td>");
		sb.append("			</tr>");
		sb.append("			<tr>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='33%' colspan='2'>&nbsp;</font></td>");
		sb.append("			</tr>");
		sb.append("			<tr>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='33%' colspan='2'><font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"'  ><strong>Valor Total do Extrato</strong>: " + Util.formataValorParaString(valorTotalExtrato,2) +"</font></td>");
		sb.append("			</tr>");
		sb.append("		</table>");

		sb.append("		<font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"'  ><strong>Pedidos:</strong></font>");
		sb.append("		<table border='1' cellspacing='0' cellpadding='1'  width='600' height='40'>");
		sb.append("			<tr bgcolor='AAAAAA'>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' ><strong>Códogp</strong></font></td>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' ><strong>Usuário</strong></font></td>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' ><strong>Data Cadastro</strong></font></td>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' ><strong>Data Entrega</strong></font></td>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' ><strong>Status</strong></font></td>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' ><strong>Valor</strong></font></td>");
		sb.append("			</tr>");

		if (pedidos!= null) {
			for (Pedido p : pedidos) {
				
				String hora = p.getHora() + "";
				if (hora.length() == 1) hora = "0"+hora; 
				String minuto = p.getMinuto() + "";
				if (minuto.length() == 1) minuto = "0"+minuto; 

				sb.append("			<tr>");
				sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' >"+ p.getId()+"</font></td>");
				sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' >"+ p.getUsuario().getNome() +"</font></td>");
				sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' >"+ Util.dateToString(p.getDataCadastro())+"</font></td>");
				sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' >"+ Util.dateToString(p.getDataEntrega())+ " - " + hora  + ":" + minuto + " </font></td>");
				sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' >"+ p.getStatusPedido().getDescricao()+"</font></td>");
				sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' >"+ Util.formataValorParaString(p.getValorTotalPedido(), 2)+"</font></td>");
				sb.append("			</tr>");
			}
		}
		sb.append("		</table>");
		sb.append("		<table border='0' width='600' cellspacing='0' cellpadding='5'>");
		sb.append("			<tr>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' width='33%' colspan='2'><font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"'  ><strong>Saldo Pedido</strong>: " + Util.formataValorParaString(valorPedidos,2) +"</font></td>");
		sb.append("			</tr>");
		sb.append("		</table>");


		sb.append("		<font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"'  ><strong>Recebimentos:</strong></font>");
		sb.append("		<table border='1' cellspacing='0' cellpadding='1'  width='600' height='40'>");
		sb.append("			<tr bgcolor='AAAAAA'>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' ><strong>Códogp</strong></font></td>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' ><strong>Usuário</strong></font></td>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' ><strong>Data Recebimento</strong></font></td>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' ><strong>Forma Recebimento</strong></font></td>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' ><strong>Valor</strong></font></td>");
		sb.append("			</tr>");

		if (recebimentos != null) {
			for (Recebimento p : recebimentos) {
				sb.append("			<tr>");
				sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' >"+ p.getId()+"</font></td>");
				sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' >"+ p.getUsuario().getNome() +"</font></td>");
				sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' >"+ Util.dateToString(p.getDataRecebimento())+"</font></td>");
				sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' >"+ p.getFormaRecebimento().getDescricao()+"</font></td>");
				sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "' align='center'> <font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"' >"+ Util.formataValorParaString(p.getValorTotalRecebimento(), 2)+"</font></td>");
				sb.append("			</tr>");
			}
		}
		sb.append("		<BR>");
		sb.append("		</table>");
		sb.append("		<table border='0' width='600' cellspacing='0' cellpadding='5'>");
		sb.append("			<tr>");
		sb.append("				<td style='font-family:" +ConfiguracaoFilter.RELATORIOS_FONT + "'><font size='"+ ConfiguracaoFilter.EXTRATO_FONTE_GERAL+"'  ><strong>Total Recebimento</strong>: " + Util.formataValorParaString(valorRecebimentos,2) +"</font></td>");
		sb.append("			</tr>");
		sb.append("		</table>");

		sb.append("		<BR>");
		sb.append("		<BR>");

		boolean exibirResponsavel = false;
		if (ConfiguracaoFilter.EXTRATO_EXIBE_RESPONSAVEL == 1) {
			exibirResponsavel = true;
		}
		if (exibirResponsavel) {
			ExibeRecebimentoServlet.adicionarResponsavel(sb, false);
		}

	}
}